zlmix开发博客

给我一个爱你的理由先

0%

怎么偷懒?

Android应用程序在启动的时候(尤其是第一次启动),从点击应用程序图标启动到Activity的onCreate方法是需要一定的时间的。一般情况下我们会设置应用程序的Splash Sreen图片,显示一个图片来避免白屏。但是这个启动图片为了应对不同的设备屏幕,往往需要很多不同的分辨率。作为一个程序员,当然希望采取一种能够适应所有屏幕的方式,怎么偷懒呢?

Activity的主题

  • 用户从启动一个应用,系统先解析该应用启动 Activity 所使用的主题(Theme,在Manifest 文件中定义的),并根据里面定义的基本元素来绘制一个初始界面,比如根据主题中定义的状态栏颜色和窗口背景( android:windowBackground)。
  • 当系统加载完该程序的所有资源并执行启动 Activity 的 onCreate 函数之后,就把初始界面替换为该 Activity 的实际界面。

窗口背景

所以,我们可以声明一个style,并且指定窗口背景

1
2
3
<style name="AppTheme.Loading" parent="AppTheme.NoActionBar">
<item name="android:windowBackground">@drawable/loading_background</item>
</style>

shape和layer-list

背景中的drawable可以通过shape或者layer-list来配置,这里只是简单的使用了一个渐变的背景

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:angle="90"
android:startColor="@color/colorPrimary"
android:endColor="@color/colorPrimaryDark">
</gradient>
</shape>

回到原来的主题

在Activity的onCreate方法中可以设置回到原来的主题

1
2
3
4
5
6
7
8
9
public class LoadingActivity extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// 必须在 super.onCreate 之前调用
setTheme(R.style.MyTheme); //设定原来的主题
super.onCreate(savedInstanceState);
// ...
}
}

优点

使用这种方式实现的 启动界面类似于效果上类似于传统的 Splash 界面,但是有很多好处:

  1. 没有额外的 Splash Activity,我看到过很多开发者为了实现 设计师要求的 Splash 界面,单独使用一个 Activity 来显示 Splash 界面,并且等待一段时间(比如 5秒)后再 finish 该界面。
  2. 没有额外的性能损耗,这是利用系统特性来实现一个启动界面,并不需要单独实现一个 Activity 来消耗系统的资源。
  3. 没有额外的过度绘制。在 onCreate 函数中重新设置为正常的 theme,可以把自定义的启动背景图给删除掉,避免主题背景和自定义 View 背景造成的过度绘制。 你也可以通过  getWindow().setBackgroundDrawable(null); 来清除该自定义启动背景。
  4. 启动速度更快。由于没有额外的 Splash Activity,启动速度当然很快。给用户带来愉悦的体验。

参考

Android 应用启动界面自定义

安装配置MongoDB

原文来自mongo auto start on OS X

使用Homebrew安装MongoDB

1
brew install mongodb

配置自动启动

  1. 链接plist文件
1
ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents

目录/usr/local/opt/mongodb/是一个链接,指向 /usr/local/Cellar/mongodb/x.y.z x.y.z是版本号,例如:( 2.4.9

  1. 通过launchctl来启动和停止 mongod
1
2
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
  1. 你也可以使用命令 brew 来启动、停止和查看服务的状态。
1
2
3
brew services list | grep mongodb
brew services start mongodb
brew services stop mongodb
阅读全文 »

已经使用Hexo搭建好了博客,想让搜索引擎收录自己的文章以便于大家分享。通过上网搜索知道了方法,照着葫芦画瓢进行配置,记录余下:

网站地图Sitemap 生成

安装插件

1
2
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save

编辑配置文件

编辑站点的_config.yml,添加

1
2
3
4
5
# hexo sitemap网站地图
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml
阅读全文 »

前言

作为一位程序猿,最近迷上了Markdown的写作。于是找了一些笔记、博客的软件来测试,包括(为知笔记、有道笔记、简书…等等等)。

由于辅导孩子学习的缘故,想把平时讲解的数学题也记录下来。数学题中有一些公式,用Word转图片?可以基本解决,但是修改不方便,而且根本没法搜索。

归纳一下我的需求:

  • Markdown编辑
  • 方便保存本地文档和发布共享
  • 支持数学公式

于是上网搜索,找到了HexoLaTeX以及MathJax,可以满足我的需求。

Hexo

LaTeX

MathJax

阅读全文 »

题:请计算 $\frac{1}{1\times2}+\frac{1}{2\times3}+\frac{1}{3\times4}+\cdots+\frac{1}{50\times51}$

解题思路

可以尝试计算前面几项分数的相加,逐步看出规律,并总结出需要的公式。

公式:$\frac{n}{n+1}+\frac{1}{(n+1)\times(n+2)}=\frac{n+1}{n+2}$

公式推导:

$$
\begin{aligned}
&\quad\frac{n}{n+1}+\frac{1}{(n+1)\times(n+2)} \
&=\frac{n\times(n+2)+1}{(n+1)\times(n+2)} \
&=\frac{n^2+2n+1}{(n+1)\times(n+2)} \
&=\frac{(n+1)^2}{(n+1)\times(n+2)} \
&=\frac{n+1}{n+2}
\end{aligned}
$$

阅读全文 »

First

MBP上的brew很老了,就想把brew更新一下,顺便安装一下NodeJs。无奈更新的过程一直卡在网络下载,毫不动弹。想想,应该是Repo访问不到的原因,于是重装brew。

根据官网上的方法,在终端输入:

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

结果还是被卡在下载阶段,怎么办呢?于是上网搜索到了“Homebrew 的安装方法(官方的方法老是安装失败) 第三方”这篇文章。

依文中所述,进行安装。由于官方弃用了旧的homebrew仓库,将homebrew程序与软件包拆分成了两个仓库。与文中描述不符,也未能成功安装。于是稍作修改,记录于此。

阅读全文 »